<?php
/**
 * Created by PhpStorm.
 * User: guokunsheng
 * Date: 2018/7/25
 * Time: 10:18
 */

namespace app\common\controller;

use think\Controller;
use app\common\lib\exception\ApiException;
use app\common\lib\IAuth;
use think\Cache;

/**
 * API模块 公共的控制器
 * Class Common
 * @package app\common\controller
 */
class Common extends Controller
{
    /**
     * headers信息
     * @var string
     */
    public $headers = '';

    /**
     * 初始化的方法
     * @throws ApiException
     */
    public function _initialize()
    {
        // 验证请求是否合法
        $this->checkRequestAuth();
    }

    /**
     * 检查每次app请求的数据是否合法
     * @throws ApiException
     */
    public function checkRequestAuth()
    {
        // 首先需要获取headers
        $headers = request()->header();

        // sign 加密需要 客户端工程师 ， 解密：服务端工程师
        // 1 headers body 仿照sign 做参数的加解密
        // 2
        // 3
        // 基础参数校验
        if (!isset($headers['sign']))
        {
            throw new ApiException('请求失败');
        }
        if (strpos(config('app.app_types'), $headers['app-type']) === false)
        {
            throw new ApiException('当前设备不支持');
        }
//        if (!in_array($headers['app-type'], config('app.app_types')))
//        {
//            throw new ApiException('当前设备不支持', 400);
//        }

        // 需要sign
        if (!IAuth::checkSignPass($headers))
        {
            throw new ApiException('请求失败');
        }

        // 1、文件  2、mysql 3、redis   由于服务器为集群架构   此处使用redis
        Cache::set($headers['sign'], 1, config('app.app_sign_cache_time'));
        // 将当前请求头信息存入header属性中，以便后面使用
        $this->headers = $headers;
        // 将当前请求数据解密后存入request_data 属性中
//        halt($this->data);
    }

}
